home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Zoom 2
/
Zoom - Release 2 (1996)(Active Software)[!].iso
/
utilities
/
blankers
/
blitzblank_260
/
developer
/
modulesources
/
bb.amigasign.c
next >
Wrap
C/C++ Source or Header
|
1995-02-28
|
7KB
|
234 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos/dos.h>
#include <exec/memory.h>
#include <intuition/intuitionbase.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <pragmas/blitzblank_pragmas.h>
#include <BlitzBlank.h>
#include <iff.h>
struct Library *BlitzBlankBase,*IFFBase;
static const char version[]="$VER: BB.AmigaSign 2.50 (30.01.94)";
char *text[]={"\33c\33uAmigaSign\33n\n\nModule for BlitzBlank\n\nCopyright 1995\nby\nThomas Börkel\n\nGraphics by Alexander Wiggert",
"_Movement:",
"_Rotspeed:",
"Sp_eed:",
"_Buffering:",
"horizontal",
"vertical",
"diagonal" };
char *cycleentries[4]={NULL,NULL,NULL,NULL};
struct BB_Object object[]={ {&object[1],BB_VGroup,0,0,0,NULL,NULL},
{&object[2],BB_Cycle,0,0,2,(char *)cycleentries,NULL},
{&object[3],BB_Slider,-5,5,0,NULL,NULL},
{&object[4],BB_Slider,1,10,10,NULL,NULL},
{&object[5],BB_Check,0,0,0,NULL,NULL},
{NULL ,BB_VGroup_End,0,0,0,NULL,NULL} };
struct BB_Message message;
struct BB_Screeninfo *screeninfo;
int depth=4;
void blank (void)
{
char file[256],actual,stop=FALSE;
int count,dx=0,dy=0,sizex=110,sizey=80,xpos,ypos,buf=0,db,rotdelay,rotcount=0,piccount=1,i,movedelay,movecount=0;
UWORD colortable[256];
ULONG dbufhandle;
IFFL_HANDLE iff,form,loopform;
struct IFFL_BMHD *bmhd;
struct ViewPort *vp;
struct BitMap *bm[4]={NULL};
vp=&screeninfo->bbscreen->ViewPort;
bm[0]=screeninfo->bbscreen->RastPort.BitMap;
if (object[1].set==0 || object[1].set==2)
dx=1;
if (object[1].set==1 || object[1].set==2)
dy=1;
rotdelay=-object[2].set;
if (rotdelay<0)
{
piccount=-rotdelay+1;
rotdelay=0;
}
movedelay=10-object[3].set;
db=object[4].set;
xpos=screeninfo->width/2-sizex/2;
ypos=screeninfo->height/2-sizey/2;
if (db)
{
bm[1]=BBL_AllocDBufBitMap (screeninfo->bbscreen);
dbufhandle=BBL_InitDBuf (screeninfo->bbscreen,bm[1]);
}
if (!db || (bm[1] && dbufhandle))
{
strcpy (file,message.path);
strcat (file,"BB.AmigaSign.data");
if ((iff=IFFL_OpenIFF (file,IFFL_MODE_READ)))
{
form=(IFFL_HANDLE)((UBYTE *)iff+12);
if ((bmhd=IFFL_GetBMHD (form)))
{
count=IFFL_GetColorTab (form,(WORD *) colortable);
LoadRGB4 (vp,colortable,count);
if ((bm[2]=BBL_AllocBitMap (sizex+10,sizey+10,depth,BMF_CLEAR)))
{
if ((bm[3]=BBL_AllocBitMap (sizex+10,sizey+10,depth,BMF_CLEAR)))
{
if ((IFFL_DecodePic(form,bm[2])))
{
if (!CheckSignal (SIGBREAKF_CTRL_C))
{
ScreenToFront (screeninfo->bbscreen);
BBL_ModuleRunning ();
IFFL_DecodePic (form,bm[3]);
form=IFFL_FindChunk (form,0L);
if ((IFFL_ModifyFrame (form,bm[2])))
{
loopform=IFFL_FindChunk (form,0L);
actual=3;
form=loopform;
do
{
if (rotcount==0)
{
for (i=1;i<=piccount;i++)
{
if ((IFFL_ModifyFrame (form,bm[actual])))
{
if (actual==3)
actual=2;
else
actual=3;
}
else
stop=TRUE;
form=IFFL_FindChunk (form,0L);
if (*(ULONG *)form!=ID_FORM)
form=loopform;
}
rotcount=rotdelay;
}
else
rotcount--;
if (!db)
WaitTOF ();
BltBitMap (bm[actual],0,0,bm[buf],xpos,ypos,sizex,sizey,0xc0,0xff,NULL);
if (db)
{
WaitBlit ();
BBL_ShowBitMap (screeninfo->bbscreen,bm[buf],dbufhandle);
// WaitTOF ();
buf=1-buf;
}
if (movecount==0)
{
xpos+=dx;
ypos+=dy;
movecount=movedelay;
}
else
movecount--;
if (xpos+sizex>screeninfo->width || xpos<0)
{
dx=-dx;
xpos+=dx+dx;
}
if (ypos+sizey>screeninfo->height || ypos<0)
{
dy=-dy;
ypos+=dy+dy;
}
} while (!CheckSignal (SIGBREAKF_CTRL_C) && !stop);
ScreenToBack (screeninfo->bbscreen);
}
}
}
BBL_FreeBitMap (bm[3]);
}
BBL_FreeBitMap (bm[2]);
}
}
IFFL_CloseIFF (iff);
}
}
if (db)
{
BBL_ShowBitMap (screeninfo->bbscreen,bm[0],dbufhandle);
// WaitTOF ();
BBL_EndDBuf (dbufhandle);
BBL_FreeBitMap (bm[1]);
}
return;
}
void main (int argc,char **argv)
{
int i;
if ((BlitzBlankBase=OpenLibrary ("blitzblank.library",BLITZBLANKLIB_VER)))
{
if ((IFFBase=OpenLibrary ("iff.library",23)))
{
message.flags=BBF_Screenmode;
message.first=&object[0];
if (strcmp (argv[1],"BLANK")==0)
{
StrToLong (argv[3],(long *) &screeninfo);
screeninfo->depth=depth;
BBL_SendMessage (&message,argv[2]);
if (screeninfo->bbscreen)
blank ();
BBL_BlankDone ();
}
else
{
message.infotext=BBL_GetString (320,text[0]);
for (i=1;i<=4;i++)
object[i].label=BBL_GetString (320+i,text[i]);
cycleentries[0]=BBL_GetString (325,text[5]);
cycleentries[1]=BBL_GetString (326,text[6]);
cycleentries[2]=BBL_GetString (327,text[7]);
if (strcmp (argv[1],"CONFIG")==0)
{
BBL_SendMessage (&message,argv[2]);
}
else
{
message.first=NULL;
BBL_SendMessage (&message,argv[2]);
}
}
CloseLibrary (IFFBase);
}
CloseLibrary (BlitzBlankBase);
}
exit (0);
}